A23 - All Free
https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_w
提出
code: python
n, m = map(int, input().split())
a = list(map(int, input().split())) for _ in range(m)
print(a)
# dpi := i 品目買うまでの最小枚数
dp = pow(10, 9) * (n+1)
dp0 = 0
dp1 =
解答
code: python
n, m = map(int, input().split())
a = list(map(int, input().split())) for _ in range(m)
# dpiS := i 枚目まで何枚か選び、無料の集合が S の時、枚数の最小値
dp = [10 ** 9*(2**n) for _ in range(m+1)]
dp00 = 0
for i in range(1, m+1):
for j in range(0, 2 ** n):
# alreadyk = 1 のとき、品物 k は既に無料になっている
already = None * n
for k in range(0, n):
if (j // (2 ** k)) % 2 == 0:
alreadyk = 0
else:
alreadyk = 1
# クーポン券 i を選んだ場合の整数表現 v を計算する
v = 0
for k in range(0, n):
if alreadyk == 1 or ai-1k == 1:
v += (2 ** k)
dpij = min(dpij, dpi-1j)
dpiv = min(dpiv, dpi-1j + 1)
if dpm2**n - 1 == 1000000000:
print("-1")
else:
print(dpm2 ** n - 1)